﻿using Microsoft.Win32;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using 基于WPF的电缆采样数据分析系统.Models.Enums;
using 基于WPF的电缆采样数据分析系统.Models.Task;
using 基于WPF的电缆采样数据分析系统.Tools.LangugeTool;
using 基于WPF的电缆采样数据分析系统.Tools.MessagePopupTool;

namespace 基于WPF的电缆采样数据分析系统.Tools.ProjectTools
{
    /// <summary>
    /// 打开工程
    /// </summary>
    public class OpenProject
    {
        /// <summary>
        /// 通过list文件的路径获取list文件信息
        /// </summary>
        /// <param name="selectedFilePath"></param>
        /// <returns></returns>
        public static ProjectDataInfo OpenProjectFun()
        {
            try
            {
                // 创建一个打开文件的对话框
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Title = LangugeConvertor.GetValue("OpenProject");
                openFileDialog.Filter = $"LIST {LangugeConvertor.GetValue("File")} (*.list)|*.list";

                if (openFileDialog.ShowDialog() == true)
                {
                    string selectedFilePath = openFileDialog.FileName;

                    // 配置全局文件路径
                    GlobalVariableEdit.FilePath = selectedFilePath;

                    // 读取文件内容
                    string projectDataInfoJson = File.ReadAllText(selectedFilePath);

                    // 反序列化对象
                    ProjectDataInfo? projectDataInfo = JsonConvert.DeserializeObject<ProjectDataInfo>(projectDataInfoJson);
                    return projectDataInfo;
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(LangugeConvertor.GetValue("CauseOfError") + ex.Message);
            }

            return null;
        }

        /// <summary>
        /// 根据路径直接获取list文件信息
        /// </summary>
        /// <returns></returns>
        public static ProjectDataInfo ByPathProjectFun(string filePath)
        {
            // 配置全局文件路径
            GlobalVariableEdit.FilePath = filePath;

            // 读取文件内容
            string projectDataInfoJson = File.ReadAllText(filePath);

            // 反序列化对象
            ProjectDataInfo? projectDataInfo = JsonConvert.DeserializeObject<ProjectDataInfo>(projectDataInfoJson);

            return projectDataInfo;
        }


        /// <summary>
        /// 根据文件名保存工程为list文件
        /// </summary>
        /// <returns></returns>
        public static void DirectSaveListFile(ProjectDataInfo projectDataInfo, string selectedFilePath)
        {
            // 创建一个新的 SaveFileDialog 实例
            try
            {
                // 更新工程信息
                projectDataInfo.UpdateUser = GlobalVariableEdit.CurrentUserInfo.Uid;

                string projectDataInfoJson = JsonConvert.SerializeObject(projectDataInfo);

                // 将一些数据写入到选定的文件中
                File.WriteAllText(selectedFilePath, projectDataInfoJson);

            }
            catch (Exception ex)
            {

            }
        }

        /// <summary>
        /// 保存工程为list文件
        /// </summary>
        /// <returns></returns>
        public static RetResult ByFileNameSaveListFile(ProjectDataInfo projectDataInfo)
        {
            // 创建一个新的 SaveFileDialog 实例
            try
            {
                var saveFileDialog = new SaveFileDialog();
                // 设置对话框标题
                saveFileDialog.Title = LangugeConvertor.GetValue("SaveFile");
                // 过滤器
                saveFileDialog.Filter = $"LIST {LangugeConvertor.GetValue("File")} (*.list)|*.list";

                // 设置默认扩展名
                saveFileDialog.DefaultExt = "list";
                // 设置默认文件名
                saveFileDialog.FileName = LangugeConvertor.GetValue("ProjectFile") + DateTime.Now.ToString("yyyyMMddHHmmss");

                // 显示对话框并检查用户是否点击了“保存”
                if (saveFileDialog.ShowDialog() == true)
                {
                    // 用户选择了文件名并点击了“保存”按钮
                    string selectedFilePath = saveFileDialog.FileName;

                    projectDataInfo.UpdateUser = GlobalVariableEdit.CurrentUserInfo.Uid;
                    string projectDataInfoJson = JsonConvert.SerializeObject(projectDataInfo);

                    // 将一些数据写入到选定的文件中
                    File.WriteAllText(selectedFilePath, projectDataInfoJson);
                    return RetResult.Success;
                }

                return RetResult.Fail;
            }
            catch (Exception ex)
            {
                MessagePopup.DisplayMessagePopup(LangugeConvertor.GetValue("CauseOfError") + ex.Message);
                return RetResult.Fail;
            }
        }
    }
}
